Script2Video 取扱説明書
台本と収録音声から、音声・字幕・タイムラインを作り、画像・動画の素材と縦書きの吹き出し・ト書きを合成して、完成動画 output.mp4 を書き出すコマンドラインツールです。この説明書は v0.2.21(2026-11-08 時点)に合わせています。v0.2.1 で、台詞を最下段の横書きの字幕で出す字幕モード(字幕モード)を追加しました。v0.2.20 で、台本の #paragraph に style= を書いて、シーンごとに字幕と吹き出しを切り替えられるようにしました。v0.2.21 で、台詞行の style= で合成役の台詞だけスタイルを変えられるようにしました。
1. 概要と作業の流れ
すべてのコマンドは script2video <コマンド> <台本.txt> の形で使い、台本のあるフォルダ(以下「台本フォルダ」)を基準に読み書きします。1 本の動画は、次の順に作ります。
numbervoices/ に(合成役は不要)buildpromptstracks/ にbubblesrenderoutput.mp4 を書き出すscript2video number 第1話.txt
script2video build 第1話.txt [--voice-dir 収録/] [--config 設定.toml] [--no-cache]
script2video prompts 第1話.txt [--config 設定.toml]
script2video bubbles 第1話.txt [--config 設定.toml] [--port N] [--no-open]
script2video render 第1話.txt [--config 設定.toml]
build をやり直してから、prompts・bubbles・render に進みます。timeline.json には台本と音声の SHA-256 が記録されていて、後のコマンドが食い違いを検査します。
2. インストールと前提
インストール(配布パッケージ)
Rust は不要です。宇摩コードワークスのサイトから Script2Video_v0.2.21.zip をダウンロードし、PATH の通ったフォルダに展開します。ffmpeg は同梱していないので、展開した install-ffmpeg.ps1 を PowerShell で実行して入れます。script2video --help で動作を確認します。
インストール(ソースからビルド)
# リポジトリの直下で実行。~/.cargo/bin/script2video.exe に入ります(PATH に ~/.cargo/bin が必要)
cargo install --path crates/s2v-cli --locked
script2video --help
コードを更新したら、同じコマンドをもう一度実行して入れ直します(同じ版でも入れ直すなら --force)。
前提
| もの | 必要なコマンド | 内容 |
|---|---|---|
| ffmpeg・ffprobe 6.0 以上 | bubbles・render | PATH に置くか、[render] ffmpeg・ffprobe で場所を指定します。git の日付版(2023 年以降)も使えます。版が古いと失敗し、版を読み取れないときは警告して続けます。 |
| 縦書きのフォント | bubbles・render | 既定は C:\Windows\Fonts\YuGothM.ttc(游ゴシック Medium)。縦書き用の機能(vrt2 か vert)と縦書きの寸法(vhea・vmtx)が必要です。 |
| ブラウザ | bubbles | 既定のブラウザ(Chrome で確認済み)。Windows では自動で開きます。 |
3. 台本フォルダの構成
台本フォルダ/
├─ 第1話.txt 台本
├─ 第1話.bak .ids .html number の出力(バックアップ・番号の記録・閲覧用の台本)
├─ voices/ 収録(S01_L001.wav …)。build は読むだけ
├─ full_dialogue.wav build: 台詞・BGM・SE を合成した音声
├─ timeline/
│ ├─ timeline.json build: 後のコマンドが読む正本(v3)
│ ├─ subtitles.srt build: 字幕
│ └─ timeline.fcpxml build: 動画編集ソフト(Filmora)向け
├─ tracks/ build: dialogue.wav / bgm.wav / se.wav
│ あなたが置く: 画像・動画の素材(S01.png、S01_C02.mp4 …)
├─ prompts/ prompts: S01.md … と index.md
├─ bubbles.json bubbles: 手動で置いた吹き出し・ト書き(.bak も)
├─ output.mp4 render: 完成動画
├─ output.stale.mp4 build が改名した前回の output.mp4
├─ work/ 中間ファイル(消してよい)
└─ Process.log 処理の記録・警告・エラー
- 台本のファイル名に、予約名(
full_dialogue.wav・Process.log・output.mp4・output.stale.mp4・bubbles.json・bubbles.json.bak・.script2video.lock・prompts)は使えません(大文字小文字を区別しません)。 work/・tracks/・timeline/・voices/・prompts/をリンク(シンボリックリンク・ジャンクション)や台本フォルダの外にしないでください。どのコマンドも何も消さずに止まります。- 同じ台本フォルダで 2 つのコマンドを同時に動かすと、後から始めた方が「別の script2video が実行中」で止まります(
.script2video.lockによる排他)。
4. 台本の書き方
詳しい規則は 台本仕様.md を参照してください。ここでは主な書き方をまとめます。
@scene 居間
朝の居間。明るく静かな雰囲気。
@pause
sentence 500
cast 300
paragraph 1000
@cast
田中:田中,pan=-25,distance=1.2
30代の男性。短髪で、紺のカーディガンを着ている。
佐藤:佐藤,pan=25,distance=1.2
20代の女性。肩までの黒髪。白いシャツ。
@script
#paragraph 朝の居間
#visual (image) 朝の光が差し込む居間。
#note 翌朝、居間。
田中:おはよう。今日は早いね。
佐藤:おはよう。コーヒー、淹れたよ。
#cut
#visual (video loop) カーテンが風に揺れる。
田中(volume=-0.2):ありがとう。いい香りだ。
セクション
| セクション | 内容 |
|---|---|
@scene 名称 | 場面。次の行に雰囲気の説明。音響の room_size=・reverb_wet=(0.0〜1.0)を書けます。 |
@pause | 無音の長さ(ミリ秒)。sentence 文の間、cast 話者の交替、paragraph シーンの間。 |
@asset | bgm_dir = 絶対パス、se_dir = 絶対パス。 |
@cast | 役名:話者名,pan=度,distance=m,height=m,volume=倍率。定義行の次の行から空行までが、その役の外見(プロンプトに使います)。エンジン名を書くと音声合成の役(合成役)になります(役名:話者名:style,voicevox,k=v…。エンジンは voicevox・aivis・xtts)。同じ役を書き直すと、合成の設定(合成するか・エンジン・声・style など)は以後の台詞に適用されます。音響パラメータ(pan など)は @scene ごとで、同じ @scene の中で最後の定義がその @scene の全台詞に使われます。 |
@script | 台詞とコマンド。 |
台詞
[S01-L003] 役名(臨時パラメータ):台詞
[S01-L003]は台詞 ID で、numberが書き込みます。自分で書くときは省略できます。- 役名と台詞の区切りは半角の
:だけです(全角の:は区切りになりません)。 - 臨時パラメータは
@castの値への増減です(pan・distance・height・volume)。 - 合成役の台詞は
(style=あまあま)で、その台詞だけスタイルを変えられます。指定できるのはその話者に含まれるスタイルだけで、ないスタイル・肉声役への指定・空の値はエラーです(話者に含まれるかはbuildの合成の前にエンジンの話者一覧で調べ、エラーの台詞は合成しません)。 - 合成役の台詞は
(voice=rec)で肉声に切り替えられます。読み指定'単語|読み'は合成役だけで使えます(表示は単語、エンジンへは読み)。区切りは最後の|なので、単語側に|を含められます('|||オアオア'は単語||、読みオアオア)。 - 台詞を重ねるときは
overlap=ミリ秒(直前の台詞の終わりの何ミリ秒手前から)か、at=L003+500(指定の台詞の開始の何ミリ秒後から。別のシーンならS01-L003)を書きます。
コマンド
| コマンド | 意味 |
|---|---|
#paragraph[S02] 名称 | シーンの区切り。番号は number が書き込みます。名称は省略できます。 |
#cut[C02] | シーンの中で素材を切り替えます(シーンの頭は暗黙の C01)。 |
#visual (印) 本文 | 直前のカットの情景。印は image・video・loop(例 (video loop))。 |
#note[N01] 本文 | ト書き。動画では枠の中に縦書きで表示します。 |
#pause ミリ秒 | 無音。台本の最後に書くと、その長さだけ音声の末尾の無音になります。 |
#bgm_start ファイル.wav / #bgm_stop | BGM の開始と停止。 |
#se ファイル.wav at=L003+200 gain=-3 | 効果音。at=・end=で台詞に合わせて置けます。 |
# コメント | # の後に空白があればコメントです。 |
カット・情景・ト書き
- カットは、その行の時点から、次の
#cutかシーンの終わりまで続きます。カットごとに素材を 1 つ置きます(8. 素材の置き方)。 #visualの印:image・videoは素材の種類の希望(省略すると未指定)、loopは動画の素材がカットより短いときに繰り返す指定です。loopが無い動画は、最後のコマで止まります。- ト書きは、その行の時点から、同じシーンの次の
#note・次の#cut・シーンの終わりのうち、最も早いところまで表示します。 - 吹き出しは、台詞の音声が鳴っている間だけ表示します。位置と大きさは自動で決まり、
bubblesで手動に直せます。config.tomlでstyle = "subtitle"にする(台本の最初のstyle=より前のシーンの既定になる。以後のstyle=のないシーンは直前のシーンの方式を引き継ぐ)か、台本の#paragraphにstyle=subtitleを書くと、そのシーンの台詞は吹き出しではなく最下段の字幕になります(字幕モード)。字幕では 1 台詞が最大 3 行です。
5. number(番号付け)
script2video number 第1話.txt
台詞・シーン・カット・ト書きに番号を書き込みます([S01-L003]・#paragraph[S02]・#cut[C02]・#note[N01])。既存の番号は変えず、欠番も詰めません。台本名の .bak(書き換え前)・.ids(番号の記録)・.html(閲覧用)も出力します。
6. build(音声・字幕・タイムライン)
script2video build 第1話.txt
script2video build 第1話.txt --voice-dir 収録/ # 収録を別の場所に置いたとき
収録ファイル
- 台詞ごとに 1 ファイル、モノラルの wav を
voices/に置きます。ファイル名は台詞 ID の-を_にしたもの(S01_L003.wav)。番号の桁数は問いません(S01_L3.wavも同じ台詞)。 - 台詞は自動で同じ音量(ラウドネス)にそろえます。
合成役の台詞
@castにエンジン名を書いた役の台詞は、buildが音声合成してvoices/S01_L003.wavに書きます(numberは合成しません)。合成する台詞が無ければエンジンは起動しません。- 文面や設定が変わっていなければ再合成しません。変わったとき、または別のファイル(肉声など)があるときは、既存のファイルを
voices/backup/S01_L003.日時(UTC).wavに退避してから合成し直します。同じ台詞とみなされる別の名前のファイル(S01_L3.wavなど)も、元の名前のまま日時を入れて退避します。退避すると警告になるので、その回の終了コードは 1 です。記録はvoices/synth.jsonです。 --no-cacheでは再合成しません。合成し直させたいときはvoices/S01_L003.wavを削除します(削除したファイルは退避されません)。- エンジンが使えない・合成に失敗した台詞は不足として仮の無音で配置し、終了コード 1 になります。
--voice-dirを指定したときは、そのフォルダが無いと合成しません(省略時のvoices/は自動で作ります)。範囲ファイル(テイク)との組み合わせは未対応です。- VOICEVOX / AivisSpeech の実行ファイルは、
exe_pathを省略すると、インストール先から自動で探します(VOICEVOX 0.26 以降の%APPDATA%\voicevox\vvpp-engines\…と、0.25 以前のProgram Files\VOICEVOX\vv-engineなど)。未起動のエンジンはbuildが起動し、終わると停止します。 - 使ったエンジンの接続先と実行ファイル(自動検出したパスを含む)、エンジンの探索・起動・停止の記録は、
Process.logに残ります。
音量と定位
- 音量: 台詞ごとに同じラウドネスへそろえます(
[normalize] target_lufs、既定-17.3)。番組の収録用に、基準距離(reference_dist= 1.0 m)の台詞のピークが -1 dBFS 前後になる値です。全体のピークは、マスターのソフトリミッタ([mix] master_ceiling_db、既定 -1.0 dBFS)で抑えます。ハードクリップは出ません。 - 声ごとのピーク差: ラウドネスをそろえても、声の質によってピークは数 dB 変わります。ピークをそろえたい役は、
@castのvolumeで調整します(例: ピークが低い役はvolume=1.4)。Script2Voice のengine_volume_offsets(エンジン別の音量補正)に当たる設定はありません。 - 音量の確かめ方:
full_dialogue.wavのピークは -1.0 dBFS 前後です。台詞ごとの値はtimeline/timeline.jsonのmeasured_lufs・norm_gain_dbで分かります。重ねた台詞(overlap=)の合計がマスターの上限を超える箇所は、ソフトリミッタが少し抑えます。 - 定位:
pan(度。+ は右、- は左)は、ステレオのマイク(間隔 0.2 m)で拾った音として左右の音量差と時間差で表します。マイクは単一指向性([audio] mic_directivity = 0.5)で、左右のマイクを外側へ 30°(mic_angle = 30.0)向けた設定が既定です。±25° で左右の音量差が 2〜3 dB 程度です。もっとはっきりさせたいときは、panを広げます(±60° など)。
出力
| ファイル | 内容 |
|---|---|
full_dialogue.wav | 台詞・BGM・SE の合成(24bit) |
tracks/dialogue.wav bgm.wav se.wav | 動画編集ソフト用の別トラック(32bit 浮動小数) |
timeline/timeline.json | 後のコマンドが読む正本(v3) |
timeline/subtitles.srt | 字幕 |
timeline/timeline.fcpxml | Filmora 向け(3 トラック) |
前回の output.mp4 があれば、出力を始める時点で output.stale.mp4 に改名します(古い動画を新しいものと取り違えないため)。動画は render で作り直してください。
7. prompts(素材のプロンプトを作る)
script2video prompts 第1話.txt
timeline.json から、画像・動画を生成するためのプロンプトをカットごとに作り、prompts/ に書きます。
prompts/S01.md…: シーンごとのファイル。カットごとに、作る素材のファイル名・種類・長さ(動画と種類未指定のとき)・プロンプト本文(コピーしやすいようコードブロック)を書きます。- プロンプト本文の順:
[prompts] style→ シーン名 →#visual→ 登場人物と外見 →[prompts] suffix。登場人物は、そのカットの間に話す人を台本の初出順に並べます。 prompts/index.md: 全カットの表(カット・ファイル名・種類・長さ・素材の有無)。tracks/の誤り(重複・種類違い・リンク)は末尾の「tracks/ の確認事項」に書きます。prompts/の中で書き換え・削除するのはindex.mdとS<数字>.mdだけです。自分のメモは別の名前(memo.mdなど)で置けます。
8. 素材の置き方
台本フォルダの tracks/ に、カットごとに 1 つ置きます。名前はカット ID から決まります。
| カット ID | 素材のファイル名の例 |
|---|---|
S01-C01(シーンの頭) | tracks/S01.png |
S01-C02 | tracks/S01_C02.mp4 |
S03-C01 | tracks/S03.jpg |
- 拡張子: 画像は
png・jpg・jpeg、動画はmp4・mov・webm(大文字小文字は区別しません。WebP は使えません)。 - 同じカットに 2 つ置く(拡張子違いを含む)、画像のカットに動画を置くなど種類が台本と違う、HDR や BT.2020 の色の動画は、
renderがエラーにします。 - 素材が足りないカットは、設定の
[render] default_imageがあればその画像で代わりに書き出します(警告)。
9. bubbles(吹き出し・ト書きの配置を画面で調整する)
script2video bubbles 第1話.txt
script2video bubbles 第1話.txt --port 8765 --no-open
自動配置された吹き出し・ト書きを、ブラウザの画面で動かしたり、大きさ・尻尾・表示の時刻を直したりして、bubbles.json に保存します。render はこの配置を使います。調整しない項目は、毎回自動で配置されます。
- 字幕として描かれるシーン(
style = "subtitle"の字幕モード、または台本のstyle=subtitleのシーン)の台詞は出さず、ト書きだけを出します。保存してもbubbles.jsonの台詞の手動配置は消さずに残します。bubbles画面での文字サイズの設定は未対応です。 - 起動すると
http://127.0.0.1:<ポート>/?token=…の 1 行を表示し、既定のブラウザで開きます(Windows)。開けなかったときや--no-openのときは、表示された URL を自分で開きます。 --portを省くと、空いているポートを自動で選びます。- 先に
buildを済ませておきます。ffmpeg・ffprobe とフォントの検査はrenderと同じです。
画面の構成
- 時刻はコマ番号で扱います。表示の出入りやカットの切り替えのコマは、
renderと同じ計算です。 - 動画の素材は、ループの指定があれば繰り返し、無ければ最後のコマで止まります(
renderと同じ)。 - ブラウザで再生できない動画の素材は、サーバーが ffmpeg でコマの画像にして見せます。
操作
| したいこと | 操作 |
|---|---|
| 項目を選ぶ | 左の一覧をクリック(その項目の開始のコマへ移ります)、またはプレビューの枠をクリック(重なっているときは前面のもの) |
| 動かす | 本体をドラッグ。または矢印キーで 1px、Shift+矢印で 10px(数値の欄に入力中のときは、矢印キーは欄の操作になります) |
| 大きさを変える | 四隅のつまみをドラッグ |
| 尻尾の向きを変える | 尻尾の先のつまみをドラッグ |
| 数値で指定する | 右の欄に入力し、Enter を押すか欄から離れると確定 |
| 表示の時刻をずらす | 「開始のずれ」「終了のずれ」(ミリ秒。±60000 まで) |
| 自動の配置に戻す | 「自動に戻す」 |
| 保存する | 「保存」か Ctrl+S |
小さすぎる大きさにすると、直前に確定した値に戻り、「確定できません: …文字が枠に収まりません」と理由が出ます。自動の項目は、手動の項目を避けて置き直されます。元に戻す・やり直しの機能はこの版にはありません。
保存と終了
- 保存されるのは手動で置いた項目だけです。保存のたびに直前の
bubbles.jsonをbubbles.json.bakに残します。 - 「終了」は、未保存の変更があると確認を出します。タブを閉じるときも警告します。
- ターミナルで Ctrl+C を押すとすぐに終わり、未保存の変更は失われます。
tracks/ の素材と full_dialogue.wav は、起動中ずっと上書き・削除・改名できないように開いています。差し替えるときは bubbles を終えてから行います。また、起動中は同じ台本フォルダで build や render を動かせません(ロック)。
bubbles を起動し直したときなどに出ます。そのページでは操作できないので、bubbles を起動し直して、新しく表示された URL を開いてください。URL の token は起動のたびに変わる使い捨ての合言葉です。
10. render(動画を書き出す)
script2video render 第1話.txt
build の出力・tracks/ の素材・bubbles.json(あれば)から、吹き出し・ト書き・音声を合成して output.mp4(H.264 + AAC、既定 1920×1080・30fps)を書き出します。中間ファイルは work/render/ に作ります(消してよい)。
- 吹き出しとト書きは縦書きで描き、手動の配置が無い項目は自動で配置します。
- 自動の吹き出しが長すぎて画面に入らないときは、画面の大きさに切り詰めて警告します(終了コード 1)。手動の項目の文字が保存した枠に入らないときは、枠を広げて警告します。
- フォントに無い文字は、項目ごとに警告して代わりの字形で描きます。
- 字幕として描かれるシーン(
style = "subtitle"、または台本のstyle=subtitle)では、台詞を縦書きの吹き出しでなく横書きの字幕で描きます(字幕モード)。台詞が四行以上になると、output.mp4を作らずに終了コード 1 で止まります。 - 書き出した動画は、寸法・コマ数・音声の長さとずれを検査してから
output.mp4に置き換えます。失敗したときは前回のoutput.mp4を変えません。
build の後に台本だけが変わっていると、警告(終了コード 1)を出して続けます。収録を変えた(full_dialogue.wav が timeline.json と食い違う)ときは失敗するので、build をやり直してください。
11. 設定(config.toml)
--config 設定.toml を省くと、同梱の config.toml を使います。全項目は同梱のファイルを参照してください。よく使うものは次のとおりです。
[render]
| キー | 既定 | 意味 |
|---|---|---|
width / height | 1920 / 1080 | 解像度(偶数) |
fps | 30 | フレームレート |
fit | contain | 素材の収め方(contain は余白あり、cover は切り取り) |
default_image | なし | 素材が無いカットの代わりの画像 |
font_path | C:\Windows\Fonts\YuGothM.ttc | 縦書きに使うフォント |
ffmpeg / ffprobe | PATH から | ffmpeg・ffprobe の場所 |
jobs | 1 | カットを同時に作る ffmpeg の数 |
style | bubble | 台詞の見せ方(bubble: 縦書きの吹き出し / subtitle: 最下段の横書きの字幕) |
字幕モード(style = "subtitle")
config.toml の [render] で style = "subtitle" にすると、台本の最初の style= より前のシーン(と最初の #paragraph より前の台詞)の台詞を、render は画面の最下段に横書きの字幕で出します(この設定は最初の style= が現れるまでの既定で、台本の #paragraph の style= が優先し、以後の style= のないシーンは直前のシーンを引き継ぎます。コマンドラインのオプションはありません)。style = "bubble"(既定・省略時)の動作は従来と同じです。
- 字幕は台詞の音声が鳴っている間だけ表示します。幅は画面の幅から左右の
marginを除いたもので、本文は最大 3 行です。折り返しは字幕の幅とfont_sizeで決まります。 - 発言者名(
@castの役名)は、帯の上辺の左上に接する囲みのラベルで出します。行数には数えません。役名が空ならラベルは出ません。subtitle_show_speaker = falseにすると、役名があってもラベルを出しません。 - 同じ時刻に複数の字幕が出るときは、下から上へ積み上げます。
- ト書きは字幕モードでも変わりません(縦書き・同じ枠・同じ自動配置)。字幕とト書きが時間も位置も重なると警告します(出力は作ります。終了コード 1)。帯が見える(塗りが透明でない、または枠線がある)ときは帯と発言者名の範囲で、帯が見えないときは画面に出る発言者名と文字の範囲で判定します。
- 文字の大きさは
font_sizeで、吹き出し・ト書き・字幕で共通です。字幕だけの文字サイズの項目はありません。
台本の #paragraph の行の最後に style=bubble / style=subtitle を書くと、シーンごとに切り替えられます(例: #paragraph[S02] 港の朝 style=subtitle)。
style=は行の最後の語だけが読まれます。名称の途中にあるものは名称の一部で、複数あれば最後の 1 つだけが指定になります。値は小文字のbubble/subtitleだけで、それ以外(空、Bubbleなど)はエラーです(buildは終了コード 2 で止まります)。- 省略したシーンは直前のシーンの方式を引き継ぎます。台本の最初の
style=より前のシーン(と最初の#paragraphより前の台詞)はconfig.tomlの[render] styleに従います。元に戻すときはstyle=bubbleと書きます。 - 字幕のシーンは上の字幕モードの規則(最大 3 行など)に従い、字幕の見た目の設定は全シーンで共通です。ト書きはどちらのシーンでも出ます。
numberはstyle=をそのまま残します。style=を書かない台本は従来と同じに動きます。 bubbles画面には字幕のシーンの台詞は出ません。保存しても、そのシーンの台詞の手動配置は消さずに残します。
| キー | 既定 | 意味 |
|---|---|---|
subtitle_text_color | #FFFFFF | 字幕の文字色 |
subtitle_outline_color | #000000 | 文字の縁取りの色 |
subtitle_outline_width | 3.0 | 文字の縁取りの太さ(0 で縁取りなし) |
subtitle_band_fill | #000000 | 帯の塗り |
subtitle_band_opacity | 0 | 帯の塗りの不透明度(0〜1) |
subtitle_band_stroke | #FFFFFF | 帯の枠線の色 |
subtitle_band_stroke_width | 0.0 | 帯の枠線の太さ(0 で枠なし) |
subtitle_padding | 20 | 帯の内側の余白(本文を 1 文字以上確保できる大きさ) |
subtitle_margin_bottom | 40 | 画面の下端から帯までの余白 |
subtitle_show_speaker | true | 発言者名のラベルを出すか(false で出さない。ラベルの分の高さも取らない) |
speaker_text_color | #FFFFFF | 発言者名の文字色 |
speaker_fill | #333333 | 発言者名の囲いの塗り |
speaker_stroke | #FFFFFF | 発言者名の囲いの枠線の色 |
speaker_stroke_width | 2.0 | 発言者名の囲いの枠線の太さ |
speaker_padding | 10 | 発言者名の囲いの内側の余白 |
台詞が四行以上になるとき、または同時に出る字幕の積み上げが画面に収まらないときは、render は output.mp4 を作らず(前回の output.mp4 も変えず)、該当する台詞をすべて Process.log に警告として書き、終了コード 1 で終わります。「台詞が四行以上」の警告には、台詞の ID・役名・行数・本文が入ります。
直し方: 台本の台詞を短く分け、number と build をやり直してから render をやり直します。build をやり直さないと、render は台本が build の後に変わったという警告を出し、古いタイムラインのまま進みます。
[prompts]
| キー | 既定 | 意味 |
|---|---|---|
style | 空 | プロンプトの先頭に付ける画風 |
suffix | 縦横比 16:9。画像の中に文字・吹き出しを入れない。 | プロンプトの末尾に付ける注意書き |
[audio] / [normalize] / [mix]
| キー | 既定 | 意味 |
|---|---|---|
[normalize] target_lufs | -17.3 | 台詞の目標ラウドネス。番組の収録用に、基準距離の台詞のピークが -1 dBFS 前後になる値です(-40〜-10)。 |
[mix] master_ceiling_db | -1.0 | マスターのソフトリミッタの上限(-6〜0)。 |
[audio] reference_dist | 1.0 | 音量の基準になるマイクまでの距離(m)。distance がこれより遠い役は小さくなります。 |
[audio] mic_directivity | 0.5 | マイクの指向性(0〜1)。0.5 は単一指向性(カーディオイド)、0 は無指向です。大きいほど左右の音量差が出ます。 |
[audio] mic_angle | 30.0 | 左右のマイクを外側へ向ける角度(度)。大きくすると左右差が増えますが、中央の音が薄くなる(中抜け)ことがあります。 |
[voicevox] / [aivis] / [xtts] / [http]
合成役を使うときだけ必要です(すべて省略可)。エンジンの接続先は url、未起動時に自動起動する実行ファイルは exe_path(引数は args、待機秒数は startup_timeout_s)で指定します。[http] の connect_timeout_s(既定 10)・request_timeout_s(既定 180)はエンジンへの通信のタイムアウトです。
12. 終了コードとログ
| コード | 意味 |
|---|---|
0 | 正常に終わりました |
1 | 警告があります(出力はできています)。Process.log を確かめてください。ただし字幕モードの render が台詞の四行以上などで止まったときも 1 で、そのときは output.mp4 を作っていません |
2 | 失敗しました(出力していないか、前回の出力を残しています) |
処理の記録・警告・エラーは、台本フォルダの Process.log に書きます。build・prompts・bubbles・render は、実行のたびに == build 2026-10-16 12:34:56(UTC) == のような区切り(日付と時刻。時刻は UTC)を付けて追記します。ログは上書きされないので、大きくなったら手で消してください。
合成役を使った build では、使ったエンジンの接続先と実行ファイルのパス(exe_path を省略したときは、自動検出したパス)、エンジンの探索・起動・接続確認・停止の記録も Process.log に残ります。エンジンの記録に警告があると、終了コードは 1 になります。
13. 困ったとき
| 症状・表示 | 原因と対処 |
|---|---|
| 音声が小さい・番組のピークが -1 dB にならない | full_dialogue.wav のピークを確かめます。全体を上げるときは [normalize] target_lufs を上げます(既定 -17.3。上げ過ぎるとソフトリミッタが働きます)。声ごとの差は @cast の volume で直します(§6「音量と定位」)。 |
pan が効かない・左右の差が小さい | マイク間隔 0.2 m のモデルなので、±25° では左右差が 2〜3 dB です。pan を広げる(±60° など)か、[audio] mic_directivity を上げます。 |
| 合成役の台詞が不足になる | Process.log でエンジンの記録を確かめます。「実行ファイルは見つかりません」なら、エンジンをインストールするか、exe_path を指定します。話者名が見つからないときは、エンジンにその話者がありません(VOICEVOX・AivisSpeech の話者名を確かめます)。 |
| 「別の script2video が実行中」 | 同じ台本フォルダで他のコマンド(bubbles の起動中を含む)が動いています。終わるのを待つか、bubbles を終了してください。 |
| 「timeline.json がありません。先に build を実行してください」 | build をまだ実行していません。 |
| 「full_dialogue.wav が timeline.json と別の build のものです」 | 収録や音声が変わっています。build をやり直してください。 |
| 「素材が足りません」 | tracks/ に素材を置くか、[render] default_image を指定します。prompts/index.md の「素材」の列で不足が分かります。 |
| 同じカットに素材が 2 つある・種類が違う | どちらかを消すか、台本の #visual の印(image/video)を直します。 |
| HDR・BT.2020 の動画でエラー | BT.709(SDR)の動画に変換してから置きます。 |
| 「ffmpeg が見つかりません」「古すぎます」 | ffmpeg・ffprobe 6.0 以上を入れて PATH に置くか、[render] ffmpeg・ffprobe で場所を指定します。 |
| フォントを読めない・縦書きの機能が無い | [render] font_path に、縦書きに対応したフォント(vrt2 か vert、vhea・vmtx を持つもの)を指定します。 |
| bubbles で「セッションが切れました」 | bubbles を起動し直し、新しい URL を開きます。 |
| bubbles で素材が「素材なし」になる | 他のプログラムが素材を書き込みのために開いています。そのプログラムを閉じて、bubbles を起動し直します。 |
output.mp4 が output.stale.mp4 になった | build をやり直したためです(古い動画)。render で作り直してください。 |
14. 現在の制限と未確認の事項
この版の制限
bubblesに元に戻す・やり直しの機能はありません。bubblesのブラウザの自動起動は Windows だけです。bubblesは同じ PC の他のプログラムからは守れません(他のウェブページ・他のローカルのサービスからの操作は防ぎます)。- WebP の素材、BT.709 以外の色の動画は使えません。
まだ人の目で確かめていないこと
- sample の台本で
number→build→prompts→ 素材 →bubbles→renderを通し、画面の配置とoutput.mp4が一致することの、最終の目視確認(受け入れ条件)。 - 30 分級の性能試験(
cargo test -p s2v-cli --release --test render_perf -- --ignored --nocapture)。 bubblesのドラッグの途中のキャンセル(ウィンドウの外へ出るなど)。
開発者向けの設計は docs/superpowers/specs/、台本の詳しい規則は 台本仕様.md、コマンドの詳細は README.md を参照してください。